/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.quickfix; import gw.lang.reflect.TypeSystem; import gw.plugin.ij.framework.GosuTestCase; import gw.plugin.ij.lang.psi.IGosuFileBase; import gw.plugin.ij.lang.psi.util.GosuPsiParseUtil; import java.util.*; import static gw.plugin.ij.util.ClassLord.simplifyTypes; public class SimplifyTypeTest extends GosuTestCase { public void testSingleType() { assertEqualsNoSpaces("List<String>", simplify("java.util.List<String>")); } public void testGenericType() { assertEqualsNoSpaces("List<Map<String, String>>", simplify("java.util.List<java.util.Map<java.lang.String, java.lang.String>>")); } public void testErrorType() { assertEqualsNoSpaces("List<Map<java.util.String, String>>", simplify("java.util.List<java.util.Map<java.util.String, java.lang.String>>")); } public void testConflict() { String type = "java.util.Set<java.awt.List>>"; type = simplifyTypes(type, parse("import java.util.List"), new HashMap<String, String>()); assertEqualsNoSpaces("Set<java.awt.List>", type); } public void testSimplifiedCollected() { String type = "java.util.Map<java.awt.List, java.util.List<String>>"; Map<String, String> simplified = new LinkedHashMap<>(); type = simplifyTypes(type, parse("import java.util.List"), simplified); assertEqualsNoSpaces("Map<java.awt.List, List<String>>", type); assertEquals(2, simplified.size()); List<String> simple = new ArrayList<>(simplified.keySet()); List<String> fqn = new ArrayList<>(simplified.values()); assertEquals("List", simple.get(0)); assertEquals("Map", simple.get(1)); assertEquals("java.util.List", fqn.get(0)); assertEquals("java.util.Map", fqn.get(1)); } private String simplify(String type) { return simplifyTypes(type, parse(""), new HashMap<String, String>()); } private void assertEqualsNoSpaces(String expected, String actual) { expected = expected.replaceAll("\\s+", ""); actual = actual.replaceAll("\\s+", ""); assertEquals(expected, actual); } protected IGosuFileBase parse(CharSequence src) { return GosuPsiParseUtil.parse(src, getProject(), TypeSystem.getGlobalModule()); } }